package com.bj.disc.fragment

import android.annotation.SuppressLint
import android.content.Intent
import android.os.Bundle
import com.ai3d.rfid.base.fragment.BaseVmVdbFragment
import com.ai3d.rfid.common.log.Logcat
import com.ai3d.rfid.databinding.FragmentMessageBinding
import com.bj.disc.base.InitLanguage
import com.bj.disc.bean.MessageRequest
import com.bj.disc.bean.MessageResponse
import com.bj.disc.service.MessageService
import com.bj.disc.service.WebSocketInstance
import com.bj.disc.ui.main.vm.MainViewModel
import com.bj.disc.util.MessagePlayer
import com.blankj.utilcode.util.GsonUtils
import com.ym521.logdog.LogDog
import org.greenrobot.eventbus.EventBus
import org.greenrobot.eventbus.Subscribe
import org.greenrobot.eventbus.ThreadMode
import java.util.UUID

/**
 * @ProjectName : Kolb
 * @Author : weijinsong
 * @Time : 2023/1/4 16:53
 * @Description : 登录
 *
 * amy在这里是怎么播放的
 * 循环播放双语交替播放Introduction.wav音频吗 你好我叫阿美欢迎来到这个游戏  每隔10S钟
 * 那可不可以点击amy播放不同的声音
 * 我看文件夹里还有其他文件Mainmenu.wav 请选择一个游戏来玩 start1 start2等
 *
 *
 *
 *
 */
class MessageFragment : BaseVmVdbFragment<MainViewModel, FragmentMessageBinding>() {

    val action: Action by lazy { Action() }

   // val playerManager: PlayerManager by lazy { PlayerManager(requireActivity()) }
   private val playerManager: MessagePlayer by lazy { MessagePlayer(requireActivity()) }

    private val tag: String = MessageFragment::class.java.simpleName
    override fun initView(savedInstanceState: Bundle?) {
        EventBus.getDefault().register(this)
        mDatabind.vm = mViewModel
        mDatabind.action = action


    }

    var isPlay = false

    @Subscribe(threadMode = ThreadMode.MAIN, sticky = false)
    fun onMessageEvent(messageResponse: MessageResponse) {
        //返回的消息是一个队列 我播完一个要接着播放下一个的 这个应该怎么实现
        //聊天
        if (messageResponse.type == "chat") {
            LogDog.debug(tag, GsonUtils.toJson(messageResponse))
            Logcat.d(tag, "收到语音消息")

//            synchronized(MessageFragment::class.java) {
//                messageResponse.chatUuid?.let {
//                    messageResponse.data?.let { it1 ->
//                        appendBase64DataToFileSync(
//                            it,
//                            it1
//                        )
//                    }
//                }
//            }
            if(messageResponse.data?.isNotEmpty() == true) {
                playerManager.handleMessage(messageResponse)
                var intent= Intent(requireActivity(),MessageService::class.java)
                intent.putExtra("data",messageResponse)
                requireActivity().startService(intent)
            }

        }

        //TODO 结束符的话显示聊天
    }

    private fun appendBase64DataToFileSync(fileName: String, base64DataSegment: String) {
//        var dir=File(DOWNLOAD_FILE_STATIC_DIR)
//        dir.mkdirs()
//        val file = File(DOWNLOAD_FILE_STATIC_DIR, fileName)
//        try {
//            // 使用 true 参数表示以追加模式打开文件，如果文件不存在则创建新文件
//            val fileOutputStream = FileOutputStream(file, true)
//            // 将 Base64 数据段转换为字节数组
//            val decodedData: ByteArray = android.util.Base64.decode(
//                base64DataSegment.replace("data:audio/mp3;base64,", ""),
//                android.util.Base64.DEFAULT
//            )
//            // 追加字节数组到文件
//            fileOutputStream.write(decodedData)
//            // 关闭文件输出流
//            fileOutputStream.close()
//            Logcat.d(tag, "${isPlay}写入完成一条语音消息" + playerManager.isPlaying())
//            if(!isPlay) {
//                isPlay=true
//                Logcat.d(tag,"播放语音消息")
//                playerManager.playBase64(file.absolutePath)
//            }
//        } catch (e: IOException) {
//            e.printStackTrace()
//        }
    }


    override fun initData() {
        super.initData()

    }

    override fun onPause() {
        super.onPause()
        playerManager.pause()
       // playerManager.release()
    }

    @SuppressLint("SetTextI18n")
    override fun createObserver() {
        super.createObserver()
    }

    override fun onResume() {
        super.onResume()
        playerManager.onResume()
    }

    override fun onDestroy() {
        super.onDestroy()
        EventBus.getDefault().unregister(this)
    }


    inner class Action {
        fun goBack() {
//            requireActivity().finish()
            InitLanguage.finishAll()
        }

        fun send() {
            var messageRequest = MessageRequest(
                true,
                UUID.randomUUID().toString().replace("-", ""),
                mDatabind.etContent.text.toString(),
                "text"
            )
            playerManager.clearMessage()
            WebSocketInstance.getInstance().send(GsonUtils.toJson(messageRequest))
            mDatabind.etContent.setText("")

        }

        fun logout() {
            //LogoutDialog(requireActivity()).show()
        }

        fun gotoUserReport() {
            // UserReportActivity.startUserReportActivity(requireActivity())
        }
    }
}